from flask import Flask
from flask_cors import CORS
from datetime import timedelta
from route.user import *
from route.car_info import *
from route.vip import *
from route.order import *
from route.stats import *
from route.place import *
from route.total import *
from route.log import *
from route.comment import *
from ai.video import *
from utils import before_request, teardown_request, handle_exception,jwt,favicon_ico

app = Flask(__name__)



app.config['JSON_AS_ASCII'] = False        #设置JSON响应中的非ASCII字符不转换为Unicode编码,目的是响应返回前端不乱吗
app.config['JWT_SECRET_KEY']='super-secret'  #设置JWT令牌的密钥为 "super-secret"，用于签发和验证令牌。
app.config['JWT_ACCESS_TOKEN_EXPIRES']=timedelta(days=3650)  #Access token过期时间为10年
app.config['MYSQL_CONNECT_TIMEOUT'] = 100  # 设置MySQL连接的超时时间为100秒，即在100秒内如果无法建立连接则视为连接失败。
jwt.init_app(app)


cors = CORS(app, resources={r"/*": {"origins": "*"}}) #允许所有来源的跨域请求
app.register_blueprint(bp_user)  #注册用户模块
app.register_blueprint(bp_car_info)  #车辆信息模块模块
app.register_blueprint(bp_vip)  #vip模块
app.register_blueprint(bp_order) #加载订单模块
app.register_blueprint(bp_stats) #加载统计模块
app.register_blueprint(bp_place) #加载车位模块
app.register_blueprint(bp_total) #加载总金额流水模块
app.register_blueprint(bp_log) #加载操作日记模块
app.register_blueprint(bp_comment) #加载公共模块
app.register_blueprint(bp_video) #加载视频流模块

# 在每个请求开始时打开会话
app.before_request(before_request)

# 在请求结束时关闭会话
app.teardown_request(teardown_request)

# 捕获错误并追加到日记文件
app.errorhandler(Exception)(handle_exception)

# 为防止浏览器自动给/favicon.ico发起请求引发的错误
app.route('/favicon.ico')(favicon_ico)



# ------------放到生产环境记得更改database.py下的ip---------------------------------------

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True,use_reloader=True) #use_reloader=True发生错误重启